/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package Customer;

import DTO.Address;
import DTO.Customer;
import DTO.ShippingMethod;
import java.util.ArrayList;
import java.util.List;



/**
 * This interface defines the customer management functionalities.
 * @author tejinder
 * @see  Customer 
 */
public interface ICustomerManager {

    /**
     * this method processes the customer registration information
     * @param customer
     * @return
     */
    String registerCustomer(Customer customer);

    /**
     * this method authenticates and processes a login request
     * @param custId
     * @param password
     * @return
     */
    boolean login(Integer custId, String password);

    /**
     * this method edits the customer address information.
     * @param addressVO
     * @return
     */
    String editCustomerAddress(Address addressVO);

    /**
     * this method edits the customer personal information
     * @param customer
     * @return
     */
    String editCustomerInfo(Customer customer);

    /**
     * This method retrieves and process the address list for a particular customer 
     * @param custId
     * @return
     */
    ArrayList<Address> getAddressList(Integer custId);

    /**
     * This method processes the customer address removal request.
     * @param custId
     * @param addId
     * @return
     */
    Boolean removeCustomerAddress(Integer custId, Integer addId);

    /**
     *  the method processes the request for adding a new address for new and existing customers.
     * @param csid
     * @param addressVO
     * @return
     */
    String addCustomerAddress(int csid,Address addressVO);

    /**
     * this method retrieves the shipping methods associated with a province
     * @param province
     * @return
     */
    ArrayList<ShippingMethod> getShipMethods(String province);

    /**
     * this method retrieves a customer information for a particular customer id 
     * @param csid
     * @return
     * @throws Exception
     */
    
     Customer getCustomerInfo(Integer csid) throws Exception ;


}
